Loading the library

library(Seurat)

Setting the working directory

setwd("C:/Users/savill/OneDrive/Documents/PhD Jesse/R-Objects")

Loading the data

# load my data
Gastruloid_96h_merged_afterQC <- readRDS("./df96v2.rds")

Gastruloid_96h_merged_afterQC
An object of class Seurat 
37316 features across 2056 samples within 2 assays 
Active assay: RNA (20235 features, 2000 variable features)
 1 other assay present: SCT
 2 dimensional reductions calculated: pca, umap
DefaultAssay(Gastruloid_96h_merged_afterQC) <- "SCT"

Gastruloid_96h_merged_afterQC <- SetIdent(Gastruloid_96h_merged_afterQC, value = "predicted.id")

Getting the metadata and taking a peak:

metadata <- Gastruloid_96h_merged_afterQC@meta.data
head(metadata)

Get all the columns so we can delete the old morphology info:

colnames(metadata)
 [1] "orig.ident"                "nCount_RNA"                "nFeature_RNA"              "Sample.barcode"            "Morphotype"                "percent.mt"               
 [7] "RNA_snn_res.0.3"           "seurat_clusters"           "S.Score"                   "G2M.Score"                 "Phase"                     "old.ident"                
[13] "nCount_SCT"                "nFeature_SCT"              "predicted.id"              "prediction.score.37"       "prediction.score.19"       "prediction.score.8"       
[19] "prediction.score.3"        "prediction.score.17"       "prediction.score.13"       "prediction.score.12"       "prediction.score.27"       "prediction.score.38"      
[25] "prediction.score.36"       "prediction.score.7"        "prediction.score.2"        "prediction.score.11"       "prediction.score.20"       "prediction.score.16"      
[31] "prediction.score.1"        "prediction.score.6"        "prediction.score.26"       "prediction.score.18"       "prediction.score.9"        "prediction.score.23"      
[37] "prediction.score.21"       "prediction.score.32"       "prediction.score.30"       "prediction.score.35"       "prediction.score.22"       "prediction.score.31"      
[43] "prediction.score.24"       "prediction.score.39"       "prediction.score.33"       "prediction.score.34"       "prediction.score.max"      "Area"                     
[49] "Perim"                     "Major"                     "Minor"                     "Feret"                     "MinFeret"                  "AR"                       
[55] "Round"                     "Solidity"                  "BRA_Area"                  "BRA_Mean"                  "BRA_Major"                 "BRA_Minor"                
[61] "BRA_Circ"                  "BRA_AR"                    "BRA_Round"                 "BRA_Solidity"              "BRA_Fraction"              "percent.ribo"             
[67] "RNA_snn_res.0.5"           "RNA_snn_res.0.4"           "sub_cluster"               "RNA_snn_res.0.6"           "RNA_snn_res.0.7"           "RNA_snn_res.0.8"          
[73] "glycolysis1"               "oxphos1"                   "BRA_Fraction_bin"          "glycolysis_score"          "glycolysis_score_quantile" "oxphos_score_quantile"    
[79] "oxlbk_score_quantile"     
all_features = colnames(metadata)
old_morpho_features = c("Area","Perim","Major","Minor","Feret","MinFeret","AR","Round","Solidity","BRA_Area","BRA_Mean","BRA_Major","BRA_Minor","BRA_Circ","BRA_AR","BRA_Round","BRA_Solidity","BRA_Fraction")
metadata_old_removed = metadata[!(all_features %in% old_morpho_features)]
#index_name = "row_names"
#metadata_old_removed[, index_name] <- rownames(metadata_old_removed)

metadata_old_removed
NA

Now we can move on to loading the new features and adding them to the metadata:

my_data_96h = read.csv("Morphodata_All_Features_Sequenced_096h.csv")
dim(my_data_96h)
[1]  24 537
my_data_96h

Adding the identifier so we can merge the dataframes:

# if this is how we add the barcode identifyer it is CRITICAL that the order is the same as in the spreadsheet
# This means A1-A12 INSTEAD of A10,A11,A12,A1,A2 (which is the default order in python and pandas)
barcoder_identifier = "bar"
my_data_96h[barcoder_identifier] <- paste("Bar", c(1:24), sep="")
my_data_96h

Add info to metadata

Here I am basically excluding the columns we don’t want to add, assuming that we want to add all columns that are in the .csv file. Alternatively we could specify which columns (or which features) we want to add to the seurat object manually. No matter which way it is done we would have to add the sample barcode to be able to merge the data with the existing metadata.

all_columns = colnames(my_data_96h)
columns_we_dont_need = c('Sample','Multi_BC','Multi_BC_#','Plate','Morphotype_120h','Axes','Morpho_120h','Morphotype_96h',barcoder_identifier)
columns_we_need = all_columns[!(all_columns %in% columns_we_dont_need)]


for (feature_name in columns_we_need) {
  metadata_old_removed[feature_name]<- my_data_96h[[feature_name]][match(metadata_old_removed$Sample.barcode, my_data_96h[[barcoder_identifier]])]
} 
metadata_old_removed

actually adding the metadata to the Seurat object. One thing to do beforehand is removing the old morpho data from the seurat object


for (x in old_morpho_features) {
  Gastruloid_96h_merged_afterQC@meta.data[[x]]=NULL
} 

head(Gastruloid_96h_merged_afterQC@meta.data)

Now we can add the new metadata

for (feature_name in columns_we_need){
  Gastruloid_96h_merged_afterQC <- AddMetaData(object = Gastruloid_96h_merged_afterQC, metadata = metadata_old_removed[[feature_name]], col.name = feature_name)
}

# Now we can look at the final dataframe:
Gastruloid_96h_merged_afterQC@meta.data

checking the column_names

colnames(Gastruloid_96h_merged_afterQC@meta.data)
  [1] "orig.ident"                                              "nCount_RNA"                                              "nFeature_RNA"                                           
  [4] "Sample.barcode"                                          "Morphotype"                                              "percent.mt"                                             
  [7] "RNA_snn_res.0.3"                                         "seurat_clusters"                                         "S.Score"                                                
 [10] "G2M.Score"                                               "Phase"                                                   "old.ident"                                              
 [13] "nCount_SCT"                                              "nFeature_SCT"                                            "predicted.id"                                           
 [16] "prediction.score.37"                                     "prediction.score.19"                                     "prediction.score.8"                                     
 [19] "prediction.score.3"                                      "prediction.score.17"                                     "prediction.score.13"                                    
 [22] "prediction.score.12"                                     "prediction.score.27"                                     "prediction.score.38"                                    
 [25] "prediction.score.36"                                     "prediction.score.7"                                      "prediction.score.2"                                     
 [28] "prediction.score.11"                                     "prediction.score.20"                                     "prediction.score.16"                                    
 [31] "prediction.score.1"                                      "prediction.score.6"                                      "prediction.score.26"                                    
 [34] "prediction.score.18"                                     "prediction.score.9"                                      "prediction.score.23"                                    
 [37] "prediction.score.21"                                     "prediction.score.32"                                     "prediction.score.30"                                    
 [40] "prediction.score.35"                                     "prediction.score.22"                                     "prediction.score.31"                                    
 [43] "prediction.score.24"                                     "prediction.score.39"                                     "prediction.score.33"                                    
 [46] "prediction.score.34"                                     "prediction.score.max"                                    "percent.ribo"                                           
 [49] "RNA_snn_res.0.5"                                         "RNA_snn_res.0.4"                                         "sub_cluster"                                            
 [52] "RNA_snn_res.0.6"                                         "RNA_snn_res.0.7"                                         "RNA_snn_res.0.8"                                        
 [55] "glycolysis1"                                             "oxphos1"                                                 "BRA_Fraction_bin"                                       
 [58] "glycolysis_score"                                        "glycolysis_score_quantile"                               "oxphos_score_quantile"                                  
 [61] "oxlbk_score_quantile"                                    "Multi_BC_."                                              "X048h_raw_BF_AreaShape_area"                            
 [64] "X048h_raw_BF_AreaShape_aspect_ratio"                     "X048h_raw_BF_AreaShape_axis_major_length"                "X048h_raw_BF_AreaShape_axis_minor_length"               
 [67] "X048h_raw_BF_AreaShape_eccentricity"                     "X048h_raw_BF_AreaShape_feret_diameter_max"               "X048h_raw_BF_AreaShape_perimeter"                       
 [70] "X048h_raw_BF_AreaShape_solidity"                         "X048h_str_BF_AreaShape_area"                             "X048h_str_BF_AreaShape_aspect_ratio"                    
 [73] "X048h_str_BF_AreaShape_eccentricity"                     "X048h_str_BF_AreaShape_equivalent_diameter"              "X048h_str_BF_AreaShape_extent"                          
 [76] "X048h_str_BF_AreaShape_form_factor"                      "X048h_str_BF_AreaShape_inertia_tensor_0_0"               "X048h_str_BF_AreaShape_inertia_tensor_0_1"              
 [79] "X048h_str_BF_AreaShape_inertia_tensor_1_0"               "X048h_str_BF_AreaShape_inertia_tensor_1_1"               "X048h_str_BF_AreaShape_inertia_tensor_eigvals_0"        
 [82] "X048h_str_BF_AreaShape_inertia_tensor_eigvals_1"         "X048h_str_BF_AreaShape_locoefa_PC_1"                     "X048h_str_BF_AreaShape_locoefa_PC_2"                    
 [85] "X048h_str_BF_AreaShape_locoefa_PC_3"                     "X048h_str_BF_AreaShape_locoefa_PC_4"                     "X048h_str_BF_AreaShape_locoefa_PC_5"                    
 [88] "X048h_str_BF_AreaShape_locoefa_UMAP_1"                   "X048h_str_BF_AreaShape_locoefa_UMAP_2"                   "X048h_str_BF_AreaShape_locoefa_UMAP_3"                  
 [91] "X048h_str_BF_AreaShape_locoefa_coeff_0"                  "X048h_str_BF_AreaShape_locoefa_coeff_1"                  "X048h_str_BF_AreaShape_locoefa_coeff_10"                
 [94] "X048h_str_BF_AreaShape_locoefa_coeff_11"                 "X048h_str_BF_AreaShape_locoefa_coeff_12"                 "X048h_str_BF_AreaShape_locoefa_coeff_13"                
 [97] "X048h_str_BF_AreaShape_locoefa_coeff_14"                 "X048h_str_BF_AreaShape_locoefa_coeff_15"                 "X048h_str_BF_AreaShape_locoefa_coeff_16"                
[100] "X048h_str_BF_AreaShape_locoefa_coeff_17"                 "X048h_str_BF_AreaShape_locoefa_coeff_18"                 "X048h_str_BF_AreaShape_locoefa_coeff_19"                
[103] "X048h_str_BF_AreaShape_locoefa_coeff_2"                  "X048h_str_BF_AreaShape_locoefa_coeff_20"                 "X048h_str_BF_AreaShape_locoefa_coeff_21"                
[106] "X048h_str_BF_AreaShape_locoefa_coeff_22"                 "X048h_str_BF_AreaShape_locoefa_coeff_23"                 "X048h_str_BF_AreaShape_locoefa_coeff_24"                
[109] "X048h_str_BF_AreaShape_locoefa_coeff_25"                 "X048h_str_BF_AreaShape_locoefa_coeff_26"                 "X048h_str_BF_AreaShape_locoefa_coeff_27"                
[112] "X048h_str_BF_AreaShape_locoefa_coeff_28"                 "X048h_str_BF_AreaShape_locoefa_coeff_29"                 "X048h_str_BF_AreaShape_locoefa_coeff_3"                 
[115] "X048h_str_BF_AreaShape_locoefa_coeff_30"                 "X048h_str_BF_AreaShape_locoefa_coeff_31"                 "X048h_str_BF_AreaShape_locoefa_coeff_32"                
[118] "X048h_str_BF_AreaShape_locoefa_coeff_33"                 "X048h_str_BF_AreaShape_locoefa_coeff_34"                 "X048h_str_BF_AreaShape_locoefa_coeff_35"                
[121] "X048h_str_BF_AreaShape_locoefa_coeff_36"                 "X048h_str_BF_AreaShape_locoefa_coeff_37"                 "X048h_str_BF_AreaShape_locoefa_coeff_38"                
[124] "X048h_str_BF_AreaShape_locoefa_coeff_39"                 "X048h_str_BF_AreaShape_locoefa_coeff_4"                  "X048h_str_BF_AreaShape_locoefa_coeff_40"                
[127] "X048h_str_BF_AreaShape_locoefa_coeff_41"                 "X048h_str_BF_AreaShape_locoefa_coeff_42"                 "X048h_str_BF_AreaShape_locoefa_coeff_43"                
[130] "X048h_str_BF_AreaShape_locoefa_coeff_44"                 "X048h_str_BF_AreaShape_locoefa_coeff_45"                 "X048h_str_BF_AreaShape_locoefa_coeff_46"                
[133] "X048h_str_BF_AreaShape_locoefa_coeff_47"                 "X048h_str_BF_AreaShape_locoefa_coeff_48"                 "X048h_str_BF_AreaShape_locoefa_coeff_49"                
[136] "X048h_str_BF_AreaShape_locoefa_coeff_5"                  "X048h_str_BF_AreaShape_locoefa_coeff_50"                 "X048h_str_BF_AreaShape_locoefa_coeff_51"                
[139] "X048h_str_BF_AreaShape_locoefa_coeff_6"                  "X048h_str_BF_AreaShape_locoefa_coeff_7"                  "X048h_str_BF_AreaShape_locoefa_coeff_8"                 
[142] "X048h_str_BF_AreaShape_locoefa_coeff_9"                  "X048h_str_BF_AreaShape_major_axis_length"                "X048h_str_BF_AreaShape_minor_axis_length"               
[145] "X048h_str_BF_AreaShape_moments_hu_0"                     "X048h_str_BF_AreaShape_moments_hu_1"                     "X048h_str_BF_AreaShape_moments_hu_2"                    
[148] "X048h_str_BF_AreaShape_moments_hu_3"                     "X048h_str_BF_AreaShape_moments_hu_4"                     "X048h_str_BF_AreaShape_moments_hu_5"                    
[151] "X048h_str_BF_AreaShape_moments_hu_6"                     "X048h_str_BF_AreaShape_orientation"                      "X048h_str_BF_AreaShape_perimeter"                       
[154] "X072h_raw_BF_AreaShape_area"                             "X072h_raw_BF_AreaShape_aspect_ratio"                     "X072h_raw_BF_AreaShape_axis_major_length"               
[157] "X072h_raw_BF_AreaShape_axis_minor_length"                "X072h_raw_BF_AreaShape_eccentricity"                     "X072h_raw_BF_AreaShape_feret_diameter_max"              
[160] "X072h_raw_BF_AreaShape_perimeter"                        "X072h_raw_BF_AreaShape_solidity"                         "X072h_raw_CH__bf_mask_Intensity_IntegratedIntensity"    
[163] "X072h_raw_CH__bf_mask_Intensity_IntegratedIntensityEdge" "X072h_raw_CH__bf_mask_Intensity_LowerQuartileIntensity"  "X072h_raw_CH__bf_mask_Intensity_MADIntensity"           
[166] "X072h_raw_CH__bf_mask_Intensity_MassDisplacement"        "X072h_raw_CH__bf_mask_Intensity_MaxIntensity"            "X072h_raw_CH__bf_mask_Intensity_MaxIntensityEdge"       
[169] "X072h_raw_CH__bf_mask_Intensity_MeanIntensity"           "X072h_raw_CH__bf_mask_Intensity_MeanIntensityEdge"       "X072h_raw_CH__bf_mask_Intensity_MedianIntensity"        
[172] "X072h_raw_CH__bf_mask_Intensity_MinIntensity"            "X072h_raw_CH__bf_mask_Intensity_MinIntensityEdge"        "X072h_raw_CH__bf_mask_Intensity_StdIntensity"           
[175] "X072h_raw_CH__bf_mask_Intensity_StdIntensityEdge"        "X072h_raw_CH__bf_mask_Intensity_UpperQuartileIntensity"  "X072h_raw_CH__bf_mask_Location_CenterMassIntensity_X"   
[178] "X072h_raw_CH__bf_mask_Location_CenterMassIntensity_Y"    "X072h_raw_CH__bf_mask_Location_CenterMassIntensity_Z"    "X072h_raw_CH__bf_mask_Location_Center_X"                
[181] "X072h_raw_CH__bf_mask_Location_Center_Y"                 "X072h_raw_CH__bf_mask_Location_Center_Z"                 "X072h_raw_CH__bf_mask_Location_MaxIntensity_X"          
[184] "X072h_raw_CH__bf_mask_Location_MaxIntensity_Y"           "X072h_raw_CH__bf_mask_Location_MaxIntensity_Z"           "X072h_raw_CH__bf_mask_RadialDistribution_FracAtD_1of9"  
[187] "X072h_raw_CH__bf_mask_RadialDistribution_FracAtD_2of9"   "X072h_raw_CH__bf_mask_RadialDistribution_FracAtD_3of9"   "X072h_raw_CH__bf_mask_RadialDistribution_FracAtD_4of9"  
[190] "X072h_raw_CH__bf_mask_RadialDistribution_FracAtD_5of9"   "X072h_raw_CH__bf_mask_RadialDistribution_FracAtD_6of9"   "X072h_raw_CH__bf_mask_RadialDistribution_FracAtD_7of9"  
[193] "X072h_raw_CH__bf_mask_RadialDistribution_FracAtD_8of9"   "X072h_raw_CH__bf_mask_RadialDistribution_FracAtD_9of9"   "X072h_raw_CH__bf_mask_RadialDistribution_MeanFrac_1of9" 
[196] "X072h_raw_CH__bf_mask_RadialDistribution_MeanFrac_2of9"  "X072h_raw_CH__bf_mask_RadialDistribution_MeanFrac_3of9"  "X072h_raw_CH__bf_mask_RadialDistribution_MeanFrac_4of9" 
[199] "X072h_raw_CH__bf_mask_RadialDistribution_MeanFrac_5of9"  "X072h_raw_CH__bf_mask_RadialDistribution_MeanFrac_6of9"  "X072h_raw_CH__bf_mask_RadialDistribution_MeanFrac_7of9" 
[202] "X072h_raw_CH__bf_mask_RadialDistribution_MeanFrac_8of9"  "X072h_raw_CH__bf_mask_RadialDistribution_MeanFrac_9of9"  "X072h_raw_CH__bf_mask_RadialDistribution_RadialCV_1of9" 
[205] "X072h_raw_CH__bf_mask_RadialDistribution_RadialCV_2of9"  "X072h_raw_CH__bf_mask_RadialDistribution_RadialCV_3of9"  "X072h_raw_CH__bf_mask_RadialDistribution_RadialCV_4of9" 
[208] "X072h_raw_CH__bf_mask_RadialDistribution_RadialCV_5of9"  "X072h_raw_CH__bf_mask_RadialDistribution_RadialCV_6of9"  "X072h_raw_CH__bf_mask_RadialDistribution_RadialCV_7of9" 
[211] "X072h_raw_CH__bf_mask_RadialDistribution_RadialCV_8of9"  "X072h_raw_CH__bf_mask_RadialDistribution_RadialCV_9of9"  "X072h_raw_CH_bra_mask_AreaShape_Area"                   
[214] "X072h_raw_CH_bra_mask_AreaShape_BoundingBoxArea"         "X072h_raw_CH_bra_mask_AreaShape_BoundingBoxMaximum_X"    "X072h_raw_CH_bra_mask_AreaShape_BoundingBoxMaximum_Y"   
[217] "X072h_raw_CH_bra_mask_AreaShape_BoundingBoxMinimum_X"    "X072h_raw_CH_bra_mask_AreaShape_BoundingBoxMinimum_Y"    "X072h_raw_CH_bra_mask_AreaShape_Center_X"               
[220] "X072h_raw_CH_bra_mask_AreaShape_Center_Y"                "X072h_raw_CH_bra_mask_AreaShape_Compactness"             "X072h_raw_CH_bra_mask_AreaShape_ConvexArea"             
[223] "X072h_raw_CH_bra_mask_AreaShape_Eccentricity"            "X072h_raw_CH_bra_mask_AreaShape_EquivalentDiameter"      "X072h_raw_CH_bra_mask_AreaShape_EulerNumber"            
[226] "X072h_raw_CH_bra_mask_AreaShape_Extent"                  "X072h_raw_CH_bra_mask_AreaShape_FormFactor"              "X072h_raw_CH_bra_mask_AreaShape_MajorAxisLength"        
[229] "X072h_raw_CH_bra_mask_AreaShape_MaxFeretDiameter"        "X072h_raw_CH_bra_mask_AreaShape_MaximumRadius"           "X072h_raw_CH_bra_mask_AreaShape_MeanRadius"             
[232] "X072h_raw_CH_bra_mask_AreaShape_MedianRadius"            "X072h_raw_CH_bra_mask_AreaShape_MinFeretDiameter"        "X072h_raw_CH_bra_mask_AreaShape_MinorAxisLength"        
[235] "X072h_raw_CH_bra_mask_AreaShape_Orientation"             "X072h_raw_CH_bra_mask_AreaShape_Perimeter"               "X072h_raw_CH_bra_mask_AreaShape_Solidity"               
[238] "X072h_raw_CH_bra_mask_Intensity_IntegratedIntensity"     "X072h_raw_CH_bra_mask_Intensity_IntegratedIntensityEdge" "X072h_raw_CH_bra_mask_Intensity_LowerQuartileIntensity" 
[241] "X072h_raw_CH_bra_mask_Intensity_MADIntensity"            "X072h_raw_CH_bra_mask_Intensity_MassDisplacement"        "X072h_raw_CH_bra_mask_Intensity_MaxIntensity"           
[244] "X072h_raw_CH_bra_mask_Intensity_MaxIntensityEdge"        "X072h_raw_CH_bra_mask_Intensity_MeanIntensity"           "X072h_raw_CH_bra_mask_Intensity_MeanIntensityEdge"      
[247] "X072h_raw_CH_bra_mask_Intensity_MedianIntensity"         "X072h_raw_CH_bra_mask_Intensity_MinIntensity"            "X072h_raw_CH_bra_mask_Intensity_MinIntensityEdge"       
[250] "X072h_raw_CH_bra_mask_Intensity_StdIntensity"            "X072h_raw_CH_bra_mask_Intensity_StdIntensityEdge"        "X072h_raw_CH_bra_mask_Intensity_UpperQuartileIntensity" 
[253] "X072h_raw_CH_bra_mask_Location_CenterMassIntensity_X"    "X072h_raw_CH_bra_mask_Location_CenterMassIntensity_Y"    "X072h_raw_CH_bra_mask_Location_CenterMassIntensity_Z"   
[256] "X072h_raw_CH_bra_mask_Location_Center_X"                 "X072h_raw_CH_bra_mask_Location_Center_Y"                 "X072h_raw_CH_bra_mask_Location_Center_Z"                
[259] "X072h_raw_CH_bra_mask_Location_MaxIntensity_X"           "X072h_raw_CH_bra_mask_Location_MaxIntensity_Y"           "X072h_raw_CH_bra_mask_Location_MaxIntensity_Z"          
[262] "X072h_raw_CH_bra_mask_RadialDistribution_FracAtD_1of9"   "X072h_raw_CH_bra_mask_RadialDistribution_FracAtD_2of9"   "X072h_raw_CH_bra_mask_RadialDistribution_FracAtD_3of9"  
[265] "X072h_raw_CH_bra_mask_RadialDistribution_FracAtD_4of9"   "X072h_raw_CH_bra_mask_RadialDistribution_FracAtD_5of9"   "X072h_raw_CH_bra_mask_RadialDistribution_FracAtD_6of9"  
[268] "X072h_raw_CH_bra_mask_RadialDistribution_FracAtD_7of9"   "X072h_raw_CH_bra_mask_RadialDistribution_FracAtD_8of9"   "X072h_raw_CH_bra_mask_RadialDistribution_FracAtD_9of9"  
[271] "X072h_raw_CH_bra_mask_RadialDistribution_MeanFrac_1of9"  "X072h_raw_CH_bra_mask_RadialDistribution_MeanFrac_2of9"  "X072h_raw_CH_bra_mask_RadialDistribution_MeanFrac_3of9" 
[274] "X072h_raw_CH_bra_mask_RadialDistribution_MeanFrac_4of9"  "X072h_raw_CH_bra_mask_RadialDistribution_MeanFrac_5of9"  "X072h_raw_CH_bra_mask_RadialDistribution_MeanFrac_6of9" 
[277] "X072h_raw_CH_bra_mask_RadialDistribution_MeanFrac_7of9"  "X072h_raw_CH_bra_mask_RadialDistribution_MeanFrac_8of9"  "X072h_raw_CH_bra_mask_RadialDistribution_MeanFrac_9of9" 
[280] "X072h_raw_CH_bra_mask_RadialDistribution_RadialCV_1of9"  "X072h_raw_CH_bra_mask_RadialDistribution_RadialCV_2of9"  "X072h_raw_CH_bra_mask_RadialDistribution_RadialCV_3of9" 
[283] "X072h_raw_CH_bra_mask_RadialDistribution_RadialCV_4of9"  "X072h_raw_CH_bra_mask_RadialDistribution_RadialCV_5of9"  "X072h_raw_CH_bra_mask_RadialDistribution_RadialCV_6of9" 
[286] "X072h_raw_CH_bra_mask_RadialDistribution_RadialCV_7of9"  "X072h_raw_CH_bra_mask_RadialDistribution_RadialCV_8of9"  "X072h_raw_CH_bra_mask_RadialDistribution_RadialCV_9of9" 
[289] "X072h_str_BF_AreaShape_area"                             "X072h_str_BF_AreaShape_aspect_ratio"                     "X072h_str_BF_AreaShape_eccentricity"                    
[292] "X072h_str_BF_AreaShape_equivalent_diameter"              "X072h_str_BF_AreaShape_extent"                           "X072h_str_BF_AreaShape_form_factor"                     
[295] "X072h_str_BF_AreaShape_inertia_tensor_0_0"               "X072h_str_BF_AreaShape_inertia_tensor_0_1"               "X072h_str_BF_AreaShape_inertia_tensor_1_0"              
[298] "X072h_str_BF_AreaShape_inertia_tensor_1_1"               "X072h_str_BF_AreaShape_inertia_tensor_eigvals_0"         "X072h_str_BF_AreaShape_inertia_tensor_eigvals_1"        
[301] "X072h_str_BF_AreaShape_locoefa_PC_1"                     "X072h_str_BF_AreaShape_locoefa_PC_2"                     "X072h_str_BF_AreaShape_locoefa_PC_3"                    
[304] "X072h_str_BF_AreaShape_locoefa_PC_4"                     "X072h_str_BF_AreaShape_locoefa_PC_5"                     "X072h_str_BF_AreaShape_locoefa_UMAP_1"                  
[307] "X072h_str_BF_AreaShape_locoefa_UMAP_2"                   "X072h_str_BF_AreaShape_locoefa_UMAP_3"                   "X072h_str_BF_AreaShape_locoefa_coeff_0"                 
[310] "X072h_str_BF_AreaShape_locoefa_coeff_1"                  "X072h_str_BF_AreaShape_locoefa_coeff_10"                 "X072h_str_BF_AreaShape_locoefa_coeff_11"                
[313] "X072h_str_BF_AreaShape_locoefa_coeff_12"                 "X072h_str_BF_AreaShape_locoefa_coeff_13"                 "X072h_str_BF_AreaShape_locoefa_coeff_14"                
[316] "X072h_str_BF_AreaShape_locoefa_coeff_15"                 "X072h_str_BF_AreaShape_locoefa_coeff_16"                 "X072h_str_BF_AreaShape_locoefa_coeff_17"                
[319] "X072h_str_BF_AreaShape_locoefa_coeff_18"                 "X072h_str_BF_AreaShape_locoefa_coeff_19"                 "X072h_str_BF_AreaShape_locoefa_coeff_2"                 
[322] "X072h_str_BF_AreaShape_locoefa_coeff_20"                 "X072h_str_BF_AreaShape_locoefa_coeff_21"                 "X072h_str_BF_AreaShape_locoefa_coeff_22"                
[325] "X072h_str_BF_AreaShape_locoefa_coeff_23"                 "X072h_str_BF_AreaShape_locoefa_coeff_24"                 "X072h_str_BF_AreaShape_locoefa_coeff_25"                
[328] "X072h_str_BF_AreaShape_locoefa_coeff_26"                 "X072h_str_BF_AreaShape_locoefa_coeff_27"                 "X072h_str_BF_AreaShape_locoefa_coeff_28"                
[331] "X072h_str_BF_AreaShape_locoefa_coeff_29"                 "X072h_str_BF_AreaShape_locoefa_coeff_3"                  "X072h_str_BF_AreaShape_locoefa_coeff_30"                
[334] "X072h_str_BF_AreaShape_locoefa_coeff_31"                 "X072h_str_BF_AreaShape_locoefa_coeff_32"                 "X072h_str_BF_AreaShape_locoefa_coeff_33"                
[337] "X072h_str_BF_AreaShape_locoefa_coeff_34"                 "X072h_str_BF_AreaShape_locoefa_coeff_35"                 "X072h_str_BF_AreaShape_locoefa_coeff_36"                
[340] "X072h_str_BF_AreaShape_locoefa_coeff_37"                 "X072h_str_BF_AreaShape_locoefa_coeff_38"                 "X072h_str_BF_AreaShape_locoefa_coeff_39"                
[343] "X072h_str_BF_AreaShape_locoefa_coeff_4"                  "X072h_str_BF_AreaShape_locoefa_coeff_40"                 "X072h_str_BF_AreaShape_locoefa_coeff_41"                
[346] "X072h_str_BF_AreaShape_locoefa_coeff_42"                 "X072h_str_BF_AreaShape_locoefa_coeff_43"                 "X072h_str_BF_AreaShape_locoefa_coeff_44"                
[349] "X072h_str_BF_AreaShape_locoefa_coeff_45"                 "X072h_str_BF_AreaShape_locoefa_coeff_46"                 "X072h_str_BF_AreaShape_locoefa_coeff_47"                
[352] "X072h_str_BF_AreaShape_locoefa_coeff_48"                 "X072h_str_BF_AreaShape_locoefa_coeff_49"                 "X072h_str_BF_AreaShape_locoefa_coeff_5"                 
[355] "X072h_str_BF_AreaShape_locoefa_coeff_50"                 "X072h_str_BF_AreaShape_locoefa_coeff_51"                 "X072h_str_BF_AreaShape_locoefa_coeff_6"                 
[358] "X072h_str_BF_AreaShape_locoefa_coeff_7"                  "X072h_str_BF_AreaShape_locoefa_coeff_8"                  "X072h_str_BF_AreaShape_locoefa_coeff_9"                 
[361] "X072h_str_BF_AreaShape_major_axis_length"                "X072h_str_BF_AreaShape_minor_axis_length"                "X072h_str_BF_AreaShape_moments_hu_0"                    
[364] "X072h_str_BF_AreaShape_moments_hu_1"                     "X072h_str_BF_AreaShape_moments_hu_2"                     "X072h_str_BF_AreaShape_moments_hu_3"                    
[367] "X072h_str_BF_AreaShape_moments_hu_4"                     "X072h_str_BF_AreaShape_moments_hu_5"                     "X072h_str_BF_AreaShape_moments_hu_6"                    
[370] "X072h_str_BF_AreaShape_orientation"                      "X072h_str_BF_AreaShape_perimeter"                        "X072h_str_CH_AreaShape_Bra_MajorAxis_Polarisation"      
[373] "X072h_str_CH_AreaShape_Bra_MinorAxis_Polarisation"       "X096h_raw_BF_AreaShape_area"                             "X096h_raw_BF_AreaShape_aspect_ratio"                    
[376] "X096h_raw_BF_AreaShape_axis_major_length"                "X096h_raw_BF_AreaShape_axis_minor_length"                "X096h_raw_BF_AreaShape_eccentricity"                    
[379] "X096h_raw_BF_AreaShape_feret_diameter_max"               "X096h_raw_BF_AreaShape_perimeter"                        "X096h_raw_BF_AreaShape_solidity"                        
[382] "X096h_raw_CH_AreaShape_Bra_AreaFraction"                 "X096h_raw_CH__bf_mask_Intensity_IntegratedIntensity"     "X096h_raw_CH__bf_mask_Intensity_IntegratedIntensityEdge"
[385] "X096h_raw_CH__bf_mask_Intensity_LowerQuartileIntensity"  "X096h_raw_CH__bf_mask_Intensity_MADIntensity"            "X096h_raw_CH__bf_mask_Intensity_MassDisplacement"       
[388] "X096h_raw_CH__bf_mask_Intensity_MaxIntensity"            "X096h_raw_CH__bf_mask_Intensity_MaxIntensityEdge"        "X096h_raw_CH__bf_mask_Intensity_MeanIntensity"          
[391] "X096h_raw_CH__bf_mask_Intensity_MeanIntensityEdge"       "X096h_raw_CH__bf_mask_Intensity_MedianIntensity"         "X096h_raw_CH__bf_mask_Intensity_MinIntensity"           
[394] "X096h_raw_CH__bf_mask_Intensity_MinIntensityEdge"        "X096h_raw_CH__bf_mask_Intensity_StdIntensity"            "X096h_raw_CH__bf_mask_Intensity_StdIntensityEdge"       
[397] "X096h_raw_CH__bf_mask_Intensity_UpperQuartileIntensity"  "X096h_raw_CH__bf_mask_Location_CenterMassIntensity_X"    "X096h_raw_CH__bf_mask_Location_CenterMassIntensity_Y"   
[400] "X096h_raw_CH__bf_mask_Location_CenterMassIntensity_Z"    "X096h_raw_CH__bf_mask_Location_Center_X"                 "X096h_raw_CH__bf_mask_Location_Center_Y"                
[403] "X096h_raw_CH__bf_mask_Location_Center_Z"                 "X096h_raw_CH__bf_mask_Location_MaxIntensity_X"           "X096h_raw_CH__bf_mask_Location_MaxIntensity_Y"          
[406] "X096h_raw_CH__bf_mask_Location_MaxIntensity_Z"           "X096h_raw_CH__bf_mask_RadialDistribution_FracAtD_1of9"   "X096h_raw_CH__bf_mask_RadialDistribution_FracAtD_2of9"  
[409] "X096h_raw_CH__bf_mask_RadialDistribution_FracAtD_3of9"   "X096h_raw_CH__bf_mask_RadialDistribution_FracAtD_4of9"   "X096h_raw_CH__bf_mask_RadialDistribution_FracAtD_5of9"  
[412] "X096h_raw_CH__bf_mask_RadialDistribution_FracAtD_6of9"   "X096h_raw_CH__bf_mask_RadialDistribution_FracAtD_7of9"   "X096h_raw_CH__bf_mask_RadialDistribution_FracAtD_8of9"  
[415] "X096h_raw_CH__bf_mask_RadialDistribution_FracAtD_9of9"   "X096h_raw_CH__bf_mask_RadialDistribution_MeanFrac_1of9"  "X096h_raw_CH__bf_mask_RadialDistribution_MeanFrac_2of9" 
[418] "X096h_raw_CH__bf_mask_RadialDistribution_MeanFrac_3of9"  "X096h_raw_CH__bf_mask_RadialDistribution_MeanFrac_4of9"  "X096h_raw_CH__bf_mask_RadialDistribution_MeanFrac_5of9" 
[421] "X096h_raw_CH__bf_mask_RadialDistribution_MeanFrac_6of9"  "X096h_raw_CH__bf_mask_RadialDistribution_MeanFrac_7of9"  "X096h_raw_CH__bf_mask_RadialDistribution_MeanFrac_8of9" 
[424] "X096h_raw_CH__bf_mask_RadialDistribution_MeanFrac_9of9"  "X096h_raw_CH__bf_mask_RadialDistribution_RadialCV_1of9"  "X096h_raw_CH__bf_mask_RadialDistribution_RadialCV_2of9" 
[427] "X096h_raw_CH__bf_mask_RadialDistribution_RadialCV_3of9"  "X096h_raw_CH__bf_mask_RadialDistribution_RadialCV_4of9"  "X096h_raw_CH__bf_mask_RadialDistribution_RadialCV_5of9" 
[430] "X096h_raw_CH__bf_mask_RadialDistribution_RadialCV_6of9"  "X096h_raw_CH__bf_mask_RadialDistribution_RadialCV_7of9"  "X096h_raw_CH__bf_mask_RadialDistribution_RadialCV_8of9" 
[433] "X096h_raw_CH__bf_mask_RadialDistribution_RadialCV_9of9"  "X096h_raw_CH_bra_mask_AreaShape_Area"                    "X096h_raw_CH_bra_mask_AreaShape_BoundingBoxArea"        
[436] "X096h_raw_CH_bra_mask_AreaShape_BoundingBoxMaximum_X"    "X096h_raw_CH_bra_mask_AreaShape_BoundingBoxMaximum_Y"    "X096h_raw_CH_bra_mask_AreaShape_BoundingBoxMinimum_X"   
[439] "X096h_raw_CH_bra_mask_AreaShape_BoundingBoxMinimum_Y"    "X096h_raw_CH_bra_mask_AreaShape_Center_X"                "X096h_raw_CH_bra_mask_AreaShape_Center_Y"               
[442] "X096h_raw_CH_bra_mask_AreaShape_Compactness"             "X096h_raw_CH_bra_mask_AreaShape_ConvexArea"              "X096h_raw_CH_bra_mask_AreaShape_Eccentricity"           
[445] "X096h_raw_CH_bra_mask_AreaShape_EquivalentDiameter"      "X096h_raw_CH_bra_mask_AreaShape_EulerNumber"             "X096h_raw_CH_bra_mask_AreaShape_Extent"                 
[448] "X096h_raw_CH_bra_mask_AreaShape_FormFactor"              "X096h_raw_CH_bra_mask_AreaShape_MajorAxisLength"         "X096h_raw_CH_bra_mask_AreaShape_MaxFeretDiameter"       
[451] "X096h_raw_CH_bra_mask_AreaShape_MaximumRadius"           "X096h_raw_CH_bra_mask_AreaShape_MeanRadius"              "X096h_raw_CH_bra_mask_AreaShape_MedianRadius"           
[454] "X096h_raw_CH_bra_mask_AreaShape_MinFeretDiameter"        "X096h_raw_CH_bra_mask_AreaShape_MinorAxisLength"         "X096h_raw_CH_bra_mask_AreaShape_Orientation"            
[457] "X096h_raw_CH_bra_mask_AreaShape_Perimeter"               "X096h_raw_CH_bra_mask_AreaShape_Solidity"                "X096h_raw_CH_bra_mask_Intensity_IntegratedIntensity"    
[460] "X096h_raw_CH_bra_mask_Intensity_IntegratedIntensityEdge" "X096h_raw_CH_bra_mask_Intensity_LowerQuartileIntensity"  "X096h_raw_CH_bra_mask_Intensity_MADIntensity"           
[463] "X096h_raw_CH_bra_mask_Intensity_MassDisplacement"        "X096h_raw_CH_bra_mask_Intensity_MaxIntensity"            "X096h_raw_CH_bra_mask_Intensity_MaxIntensityEdge"       
[466] "X096h_raw_CH_bra_mask_Intensity_MeanIntensity"           "X096h_raw_CH_bra_mask_Intensity_MeanIntensityEdge"       "X096h_raw_CH_bra_mask_Intensity_MedianIntensity"        
[469] "X096h_raw_CH_bra_mask_Intensity_MinIntensity"            "X096h_raw_CH_bra_mask_Intensity_MinIntensityEdge"        "X096h_raw_CH_bra_mask_Intensity_StdIntensity"           
[472] "X096h_raw_CH_bra_mask_Intensity_StdIntensityEdge"        "X096h_raw_CH_bra_mask_Intensity_UpperQuartileIntensity"  "X096h_raw_CH_bra_mask_Location_CenterMassIntensity_X"   
[475] "X096h_raw_CH_bra_mask_Location_CenterMassIntensity_Y"    "X096h_raw_CH_bra_mask_Location_CenterMassIntensity_Z"    "X096h_raw_CH_bra_mask_Location_Center_X"                
[478] "X096h_raw_CH_bra_mask_Location_Center_Y"                 "X096h_raw_CH_bra_mask_Location_Center_Z"                 "X096h_raw_CH_bra_mask_Location_MaxIntensity_X"          
[481] "X096h_raw_CH_bra_mask_Location_MaxIntensity_Y"           "X096h_raw_CH_bra_mask_Location_MaxIntensity_Z"           "X096h_raw_CH_bra_mask_RadialDistribution_FracAtD_1of9"  
[484] "X096h_raw_CH_bra_mask_RadialDistribution_FracAtD_2of9"   "X096h_raw_CH_bra_mask_RadialDistribution_FracAtD_3of9"   "X096h_raw_CH_bra_mask_RadialDistribution_FracAtD_4of9"  
[487] "X096h_raw_CH_bra_mask_RadialDistribution_FracAtD_5of9"   "X096h_raw_CH_bra_mask_RadialDistribution_FracAtD_6of9"   "X096h_raw_CH_bra_mask_RadialDistribution_FracAtD_7of9"  
[490] "X096h_raw_CH_bra_mask_RadialDistribution_FracAtD_8of9"   "X096h_raw_CH_bra_mask_RadialDistribution_FracAtD_9of9"   "X096h_raw_CH_bra_mask_RadialDistribution_MeanFrac_1of9" 
[493] "X096h_raw_CH_bra_mask_RadialDistribution_MeanFrac_2of9"  "X096h_raw_CH_bra_mask_RadialDistribution_MeanFrac_3of9"  "X096h_raw_CH_bra_mask_RadialDistribution_MeanFrac_4of9" 
[496] "X096h_raw_CH_bra_mask_RadialDistribution_MeanFrac_5of9"  "X096h_raw_CH_bra_mask_RadialDistribution_MeanFrac_6of9"  "X096h_raw_CH_bra_mask_RadialDistribution_MeanFrac_7of9" 
[499] "X096h_raw_CH_bra_mask_RadialDistribution_MeanFrac_8of9"  "X096h_raw_CH_bra_mask_RadialDistribution_MeanFrac_9of9"  "X096h_raw_CH_bra_mask_RadialDistribution_RadialCV_1of9" 
[502] "X096h_raw_CH_bra_mask_RadialDistribution_RadialCV_2of9"  "X096h_raw_CH_bra_mask_RadialDistribution_RadialCV_3of9"  "X096h_raw_CH_bra_mask_RadialDistribution_RadialCV_4of9" 
[505] "X096h_raw_CH_bra_mask_RadialDistribution_RadialCV_5of9"  "X096h_raw_CH_bra_mask_RadialDistribution_RadialCV_6of9"  "X096h_raw_CH_bra_mask_RadialDistribution_RadialCV_7of9" 
[508] "X096h_raw_CH_bra_mask_RadialDistribution_RadialCV_8of9"  "X096h_raw_CH_bra_mask_RadialDistribution_RadialCV_9of9"  "X096h_str_BF_AreaShape_area"                            
[511] "X096h_str_BF_AreaShape_aspect_ratio"                     "X096h_str_BF_AreaShape_eccentricity"                     "X096h_str_BF_AreaShape_equivalent_diameter"             
[514] "X096h_str_BF_AreaShape_extent"                           "X096h_str_BF_AreaShape_form_factor"                      "X096h_str_BF_AreaShape_inertia_tensor_0_0"              
[517] "X096h_str_BF_AreaShape_inertia_tensor_0_1"               "X096h_str_BF_AreaShape_inertia_tensor_1_0"               "X096h_str_BF_AreaShape_inertia_tensor_1_1"              
[520] "X096h_str_BF_AreaShape_inertia_tensor_eigvals_0"         "X096h_str_BF_AreaShape_inertia_tensor_eigvals_1"         "X096h_str_BF_AreaShape_locoefa_PC_1"                    
[523] "X096h_str_BF_AreaShape_locoefa_PC_2"                     "X096h_str_BF_AreaShape_locoefa_PC_3"                     "X096h_str_BF_AreaShape_locoefa_PC_4"                    
[526] "X096h_str_BF_AreaShape_locoefa_PC_5"                     "X096h_str_BF_AreaShape_locoefa_UMAP_1"                   "X096h_str_BF_AreaShape_locoefa_UMAP_2"                  
[529] "X096h_str_BF_AreaShape_locoefa_UMAP_3"                   "X096h_str_BF_AreaShape_locoefa_coeff_0"                  "X096h_str_BF_AreaShape_locoefa_coeff_1"                 
[532] "X096h_str_BF_AreaShape_locoefa_coeff_10"                 "X096h_str_BF_AreaShape_locoefa_coeff_11"                 "X096h_str_BF_AreaShape_locoefa_coeff_12"                
[535] "X096h_str_BF_AreaShape_locoefa_coeff_13"                 "X096h_str_BF_AreaShape_locoefa_coeff_14"                 "X096h_str_BF_AreaShape_locoefa_coeff_15"                
[538] "X096h_str_BF_AreaShape_locoefa_coeff_16"                 "X096h_str_BF_AreaShape_locoefa_coeff_17"                 "X096h_str_BF_AreaShape_locoefa_coeff_18"                
[541] "X096h_str_BF_AreaShape_locoefa_coeff_19"                 "X096h_str_BF_AreaShape_locoefa_coeff_2"                  "X096h_str_BF_AreaShape_locoefa_coeff_20"                
[544] "X096h_str_BF_AreaShape_locoefa_coeff_21"                 "X096h_str_BF_AreaShape_locoefa_coeff_22"                 "X096h_str_BF_AreaShape_locoefa_coeff_23"                
[547] "X096h_str_BF_AreaShape_locoefa_coeff_24"                 "X096h_str_BF_AreaShape_locoefa_coeff_25"                 "X096h_str_BF_AreaShape_locoefa_coeff_26"                
[550] "X096h_str_BF_AreaShape_locoefa_coeff_27"                 "X096h_str_BF_AreaShape_locoefa_coeff_28"                 "X096h_str_BF_AreaShape_locoefa_coeff_29"                
[553] "X096h_str_BF_AreaShape_locoefa_coeff_3"                  "X096h_str_BF_AreaShape_locoefa_coeff_30"                 "X096h_str_BF_AreaShape_locoefa_coeff_31"                
[556] "X096h_str_BF_AreaShape_locoefa_coeff_32"                 "X096h_str_BF_AreaShape_locoefa_coeff_33"                 "X096h_str_BF_AreaShape_locoefa_coeff_34"                
[559] "X096h_str_BF_AreaShape_locoefa_coeff_35"                 "X096h_str_BF_AreaShape_locoefa_coeff_36"                 "X096h_str_BF_AreaShape_locoefa_coeff_37"                
[562] "X096h_str_BF_AreaShape_locoefa_coeff_38"                 "X096h_str_BF_AreaShape_locoefa_coeff_39"                 "X096h_str_BF_AreaShape_locoefa_coeff_4"                 
[565] "X096h_str_BF_AreaShape_locoefa_coeff_40"                 "X096h_str_BF_AreaShape_locoefa_coeff_41"                 "X096h_str_BF_AreaShape_locoefa_coeff_42"                
[568] "X096h_str_BF_AreaShape_locoefa_coeff_43"                 "X096h_str_BF_AreaShape_locoefa_coeff_44"                 "X096h_str_BF_AreaShape_locoefa_coeff_45"                
[571] "X096h_str_BF_AreaShape_locoefa_coeff_46"                 "X096h_str_BF_AreaShape_locoefa_coeff_47"                 "X096h_str_BF_AreaShape_locoefa_coeff_48"                
[574] "X096h_str_BF_AreaShape_locoefa_coeff_49"                 "X096h_str_BF_AreaShape_locoefa_coeff_5"                  "X096h_str_BF_AreaShape_locoefa_coeff_50"                
[577] "X096h_str_BF_AreaShape_locoefa_coeff_51"                 "X096h_str_BF_AreaShape_locoefa_coeff_6"                  "X096h_str_BF_AreaShape_locoefa_coeff_7"                 
[580] "X096h_str_BF_AreaShape_locoefa_coeff_8"                  "X096h_str_BF_AreaShape_locoefa_coeff_9"                  "X096h_str_BF_AreaShape_major_axis_length"               
[583] "X096h_str_BF_AreaShape_minor_axis_length"                "X096h_str_BF_AreaShape_moments_hu_0"                     "X096h_str_BF_AreaShape_moments_hu_1"                    
[586] "X096h_str_BF_AreaShape_moments_hu_2"                     "X096h_str_BF_AreaShape_moments_hu_3"                     "X096h_str_BF_AreaShape_moments_hu_4"                    
[589] "X096h_str_BF_AreaShape_moments_hu_5"                     "X096h_str_BF_AreaShape_moments_hu_6"                     "X096h_str_BF_AreaShape_orientation"                     
[592] "X096h_str_BF_AreaShape_perimeter"                        "X096h_str_CH_AreaShape_Bra_MajorAxis_Polarisation"       "X096h_str_CH_AreaShape_Bra_MinorAxis_Polarisation"      

Now we can save this monstrosity to disc:

saveRDS(Gastruloid_96h_merged_afterQC, file = "df96v2_updated_morphodata.rds")
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpMb2FkaW5nIHRoZSBsaWJyYXJ5DQpgYGB7cn0NCmxpYnJhcnkoU2V1cmF0KQ0KYGBgDQoNClNldHRpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5DQpgYGB7cn0NCnNldHdkKCJDOi9Vc2Vycy9zYXZpbGwvT25lRHJpdmUvRG9jdW1lbnRzL1BoRCBKZXNzZS9SLU9iamVjdHMiKQ0KYGBgDQpMb2FkaW5nIHRoZSBkYXRhDQpgYGB7cn0NCiMgbG9hZCBteSBkYXRhDQpHYXN0cnVsb2lkXzk2aF9tZXJnZWRfYWZ0ZXJRQyA8LSByZWFkUkRTKCIuL2RmOTZ2Mi5yZHMiKQ0KDQpHYXN0cnVsb2lkXzk2aF9tZXJnZWRfYWZ0ZXJRQw0KRGVmYXVsdEFzc2F5KEdhc3RydWxvaWRfOTZoX21lcmdlZF9hZnRlclFDKSA8LSAiU0NUIg0KDQpHYXN0cnVsb2lkXzk2aF9tZXJnZWRfYWZ0ZXJRQyA8LSBTZXRJZGVudChHYXN0cnVsb2lkXzk2aF9tZXJnZWRfYWZ0ZXJRQywgdmFsdWUgPSAicHJlZGljdGVkLmlkIikNCmBgYA0KR2V0dGluZyB0aGUgbWV0YWRhdGEgYW5kIHRha2luZyBhIHBlYWs6DQpgYGB7cn0NCm1ldGFkYXRhIDwtIEdhc3RydWxvaWRfOTZoX21lcmdlZF9hZnRlclFDQG1ldGEuZGF0YQ0KaGVhZChtZXRhZGF0YSkNCmBgYA0KR2V0IGFsbCB0aGUgY29sdW1ucyBzbyB3ZSBjYW4gZGVsZXRlIHRoZSBvbGQgbW9ycGhvbG9neSBpbmZvOg0KYGBge3J9DQpjb2xuYW1lcyhtZXRhZGF0YSkNCmBgYA0KYGBge3J9DQphbGxfZmVhdHVyZXMgPSBjb2xuYW1lcyhtZXRhZGF0YSkNCm9sZF9tb3JwaG9fZmVhdHVyZXMgPSBjKCJBcmVhIiwiUGVyaW0iLCJNYWpvciIsIk1pbm9yIiwiRmVyZXQiLCJNaW5GZXJldCIsIkFSIiwiUm91bmQiLCJTb2xpZGl0eSIsIkJSQV9BcmVhIiwiQlJBX01lYW4iLCJCUkFfTWFqb3IiLCJCUkFfTWlub3IiLCJCUkFfQ2lyYyIsIkJSQV9BUiIsIkJSQV9Sb3VuZCIsIkJSQV9Tb2xpZGl0eSIsIkJSQV9GcmFjdGlvbiIpDQptZXRhZGF0YV9vbGRfcmVtb3ZlZCA9IG1ldGFkYXRhWyEoYWxsX2ZlYXR1cmVzICVpbiUgb2xkX21vcnBob19mZWF0dXJlcyldDQojaW5kZXhfbmFtZSA9ICJyb3dfbmFtZXMiDQojbWV0YWRhdGFfb2xkX3JlbW92ZWRbLCBpbmRleF9uYW1lXSA8LSByb3duYW1lcyhtZXRhZGF0YV9vbGRfcmVtb3ZlZCkNCg0KbWV0YWRhdGFfb2xkX3JlbW92ZWQNCg0KYGBgDQpOb3cgd2UgY2FuIG1vdmUgb24gdG8gbG9hZGluZyB0aGUgbmV3IGZlYXR1cmVzIGFuZCBhZGRpbmcgdGhlbSB0byB0aGUgbWV0YWRhdGE6DQpgYGB7cn0NCm15X2RhdGFfOTZoID0gcmVhZC5jc3YoIk1vcnBob2RhdGFfQWxsX0ZlYXR1cmVzX1NlcXVlbmNlZF8wOTZoLmNzdiIpDQpkaW0obXlfZGF0YV85NmgpDQpteV9kYXRhXzk2aA0KYGBgDQpBZGRpbmcgdGhlIGlkZW50aWZpZXIgc28gd2UgY2FuIG1lcmdlIHRoZSBkYXRhZnJhbWVzOg0KYGBge3J9DQojIGlmIHRoaXMgaXMgaG93IHdlIGFkZCB0aGUgYmFyY29kZSBpZGVudGlmeWVyIGl0IGlzIENSSVRJQ0FMIHRoYXQgdGhlIG9yZGVyIGlzIHRoZSBzYW1lIGFzIGluIHRoZSBzcHJlYWRzaGVldA0KIyBUaGlzIG1lYW5zIEExLUExMiBJTlNURUFEIG9mIEExMCxBMTEsQTEyLEExLEEyICh3aGljaCBpcyB0aGUgZGVmYXVsdCBvcmRlciBpbiBweXRob24gYW5kIHBhbmRhcykNCmJhcmNvZGVyX2lkZW50aWZpZXIgPSAiYmFyIg0KbXlfZGF0YV85NmhbYmFyY29kZXJfaWRlbnRpZmllcl0gPC0gcGFzdGUoIkJhciIsIGMoMToyNCksIHNlcD0iIikNCm15X2RhdGFfOTZoDQpgYGANCiMjIEFkZCBpbmZvIHRvIG1ldGFkYXRhDQpIZXJlIEkgYW0gYmFzaWNhbGx5IGV4Y2x1ZGluZyB0aGUgY29sdW1ucyB3ZSBkb24ndCB3YW50IHRvIGFkZCwgYXNzdW1pbmcgdGhhdCB3ZSB3YW50IHRvIGFkZCBhbGwgY29sdW1ucyB0aGF0IGFyZSBpbiB0aGUgLmNzdiBmaWxlLiBBbHRlcm5hdGl2ZWx5IHdlIGNvdWxkIHNwZWNpZnkgd2hpY2ggY29sdW1ucyAob3Igd2hpY2ggZmVhdHVyZXMpIHdlIHdhbnQgdG8gYWRkIHRvIHRoZSBzZXVyYXQgb2JqZWN0IG1hbnVhbGx5LiBObyBtYXR0ZXIgd2hpY2ggd2F5IGl0IGlzIGRvbmUgd2Ugd291bGQgaGF2ZSB0byBhZGQgdGhlIHNhbXBsZSBiYXJjb2RlIHRvIGJlIGFibGUgdG8gbWVyZ2UgdGhlIGRhdGEgd2l0aCB0aGUgZXhpc3RpbmcgbWV0YWRhdGEuDQpgYGB7cn0NCmFsbF9jb2x1bW5zID0gY29sbmFtZXMobXlfZGF0YV85NmgpDQpjb2x1bW5zX3dlX2RvbnRfbmVlZCA9IGMoJ1NhbXBsZScsJ011bHRpX0JDJywnTXVsdGlfQkNfIycsJ1BsYXRlJywnTW9ycGhvdHlwZV8xMjBoJywnQXhlcycsJ01vcnBob18xMjBoJywnTW9ycGhvdHlwZV85NmgnLGJhcmNvZGVyX2lkZW50aWZpZXIpDQpjb2x1bW5zX3dlX25lZWQgPSBhbGxfY29sdW1uc1shKGFsbF9jb2x1bW5zICVpbiUgY29sdW1uc193ZV9kb250X25lZWQpXQ0KDQoNCmZvciAoZmVhdHVyZV9uYW1lIGluIGNvbHVtbnNfd2VfbmVlZCkgew0KICBtZXRhZGF0YV9vbGRfcmVtb3ZlZFtmZWF0dXJlX25hbWVdPC0gbXlfZGF0YV85NmhbW2ZlYXR1cmVfbmFtZV1dW21hdGNoKG1ldGFkYXRhX29sZF9yZW1vdmVkJFNhbXBsZS5iYXJjb2RlLCBteV9kYXRhXzk2aFtbYmFyY29kZXJfaWRlbnRpZmllcl1dKV0NCn0gDQptZXRhZGF0YV9vbGRfcmVtb3ZlZA0KYGBgDQoNCmFjdHVhbGx5IGFkZGluZyB0aGUgbWV0YWRhdGEgdG8gdGhlIFNldXJhdCBvYmplY3QuIE9uZSB0aGluZyB0byBkbyBiZWZvcmVoYW5kIGlzIHJlbW92aW5nIHRoZSBvbGQgbW9ycGhvIGRhdGEgZnJvbSB0aGUgc2V1cmF0IG9iamVjdA0KYGBge3J9DQoNCmZvciAoeCBpbiBvbGRfbW9ycGhvX2ZlYXR1cmVzKSB7DQogIEdhc3RydWxvaWRfOTZoX21lcmdlZF9hZnRlclFDQG1ldGEuZGF0YVtbeF1dPU5VTEwNCn0gDQoNCmhlYWQoR2FzdHJ1bG9pZF85NmhfbWVyZ2VkX2FmdGVyUUNAbWV0YS5kYXRhKQ0KYGBgDQpOb3cgd2UgY2FuIGFkZCB0aGUgbmV3IG1ldGFkYXRhDQpgYGB7cn0NCmZvciAoZmVhdHVyZV9uYW1lIGluIGNvbHVtbnNfd2VfbmVlZCl7DQogIEdhc3RydWxvaWRfOTZoX21lcmdlZF9hZnRlclFDIDwtIEFkZE1ldGFEYXRhKG9iamVjdCA9IEdhc3RydWxvaWRfOTZoX21lcmdlZF9hZnRlclFDLCBtZXRhZGF0YSA9IG1ldGFkYXRhX29sZF9yZW1vdmVkW1tmZWF0dXJlX25hbWVdXSwgY29sLm5hbWUgPSBmZWF0dXJlX25hbWUpDQp9DQoNCiMgTm93IHdlIGNhbiBsb29rIGF0IHRoZSBmaW5hbCBkYXRhZnJhbWU6DQpHYXN0cnVsb2lkXzk2aF9tZXJnZWRfYWZ0ZXJRQ0BtZXRhLmRhdGENCmBgYA0KY2hlY2tpbmcgdGhlIGNvbHVtbl9uYW1lcw0KYGBge3J9DQpjb2xuYW1lcyhHYXN0cnVsb2lkXzk2aF9tZXJnZWRfYWZ0ZXJRQ0BtZXRhLmRhdGEpDQpgYGANCk5vdyB3ZSBjYW4gc2F2ZSB0aGlzIG1vbnN0cm9zaXR5IHRvIGRpc2M6DQpgYGB7cn0NCnNhdmVSRFMoR2FzdHJ1bG9pZF85NmhfbWVyZ2VkX2FmdGVyUUMsIGZpbGUgPSAiZGY5NnYyX3VwZGF0ZWRfbW9ycGhvZGF0YS5yZHMiKQ0KYGBgDQo=